package object3;



/**
 * 代码块使用细节
 */
public class CodeBlockDetail02 {

    public static void main(String[] args) {

        /*
            创建一个对象时，在一个类调用顺序是
                1.调用静态代码块和静态属性初始化（静态代码块和静态属性初始化调用的优先级一样，按上下文顺序来）
                2.调用普通代码块和普通属性的初始化（普通代码块和普通属性初始化调用的优先级一样，按上下文顺序来）
                3.调用构造方法
         */
        A a = new A();
        /*
            A 静态代码块01
            getN1被调用...
            A的普通代码块01
            getN2被调用...
            A() 构造器被调用...
         */
    }
}

class A {
    {
        System.out.println("A的普通代码块01");
    }

    private int n2 = getN2();

    static {
        System.out.println("A 静态代码块01");
    }

    private static int n1 = getN1();

    public static int getN1() {
        System.out.println("getN1被调用...");
        return 100;
    }

    public int getN2() {
        System.out.println("getN2被调用...");
        return 200;
    }

    //无参构造器
    public A() {
        System.out.println("A() 构造器被调用...");
    }

}